Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

37장. Auto Scaling Group과 스케일링 정책

이 장에서 말하고자 하는 것

이제 우리는 트래픽을 ALB가 받아
여러 서버로 분산하는 모양까지 그렸다.

그런데 다음 질문이 남는다.

서버를 미리 몇 대 띄워둘까?
트래픽이 늘면 누가 더 만들어줄까?

이 질문에 답하는 도구가

Auto Scaling Group (ASG)

이다.

ASG는 EC2 인스턴스를 자동으로 늘리고 줄인다.
컨테이너 환경의 ECS Service Auto Scaling도
같은 사고방식 위에 있다.


1. 왜 자동 스케일링이 필요한가

미리 큰 서버 한 대를 띄우면

평소: 5% 사용 → 자원 낭비
피크: 100%   → 더 큰 게 필요

미리 여러 대를 띄우면

평소에도 여러 대가 켜져 있음 → 비용

해결은 단순하다.

트래픽에 맞춰 자동으로 서버 수를 바꾼다

이게 클라우드의 핵심 강점 중 하나다.


2. ASG의 기본 구성

ASG는 세 가지 숫자로 운영된다.

최소 (Minimum)  : 항상 이만큼은 떠 있어야 한다
원하는 (Desired): 지금 이만큼 떠 있어야 한다
최대 (Maximum) : 이 이상으로는 안 늘어난다
Min 2  Desired 4  Max 10
  • 평소: 4대 운영
  • 트래픽 폭증: 최대 10대까지 자동 증가
  • 트래픽 줄면: 2대까지 자동 축소

3. ASG는 무엇을 보고 결정하는가

ASG는 CloudWatch 지표 를 본다.

  • CPU 사용률
  • 네트워크 입출력
  • ALB로 받는 요청 수
  • 커스텀 지표

이 지표가 임계를 넘으면 서버를 늘리거나 줄인다.


4. 스케일링 정책의 세 가지 방식

방식 1. Target Tracking — 가장 단순하고 권장

CPU 사용률 평균 50%를 유지해라

ASG가 알아서 늘리고 줄인다.
운영의 90%는 이걸로 해결된다.

방식 2. Step Scaling — 단계별로

CPU 70% 넘으면 +1
CPU 90% 넘으면 +3
CPU 30% 미만이면 -1

세밀한 제어가 필요할 때.

방식 3. Scheduled — 시간 기반

매일 오전 9시에 desired = 10
매일 오후 11시에 desired = 2

트래픽 패턴이 시간에 명확히 묶일 때 (예: 출근 시간).


5. 헬스 체크와의 협력

ASG는 ALB의 헬스 체크와 연동된다.

1. ASG가 새 EC2를 띄운다
2. ALB의 타깃 그룹에 자동 등록된다
3. 헬스 체크 통과 → 트래픽 받기 시작
4. 만약 실패 → ASG가 그 EC2를 죽이고 새로 띄운다

ASG는 단순히 수만 맞추는 게 아니라
죽은 인스턴스를 자동 교체하는 자가 치유 메커니즘이기도 하다


6. ECS에서의 자동 스케일링

ECS에서는 두 단계의 스케일링이 있다.

1. 서비스 안의 태스크 수 자동 조정 (Service Auto Scaling)
2. (EC2 기반일 때만) 클러스터의 EC2 인스턴스 수 자동 조정 (ASG)

Fargate를 쓰면 2번이 사라진다. 태스크 수만 조정하면 끝난다.

이 책의 척추 구조는 Fargate를 기본으로 가정하므로
ASG보다는 Service Auto Scaling을 더 자주 만지게 된다.

다만 사고방식은 같다.


7. 우리 서비스에서

척추 그림에서 자동 스케일링이 동작하는 위치다.

[ALB]
   ↓
[ECS Service: orders]   ← Service Auto Scaling
   ├─ task 1
   ├─ task 2
   └─ (트래픽 늘면 자동으로 task 3, 4 …)
  • CPU > 60% → 태스크 +1
  • 한 시간간 CPU < 30% → 태스크 -1
  • 최소 2개, 최대 10개

이 규칙 하나로

“낮에는 자동으로 커지고 밤에는 자동으로 줄어드는 서비스”

가 된다.


8. 직접 확인해보기 — CLI

ASG 보기

aws autoscaling describe-auto-scaling-groups

원하는 인스턴스 수 변경

aws autoscaling set-desired-capacity \
  --auto-scaling-group-name my-asg \
  --desired-capacity 5

ECS Service Auto Scaling 등록

aws application-autoscaling register-scalable-target \
  --service-namespace ecs \
  --resource-id service/cluster-name/service-name \
  --scalable-dimension ecs:service:DesiredCount \
  --min-capacity 2 \
  --max-capacity 10

9. 코드로는 이렇게 생겼다 — Terraform

ECS Service Auto Scaling을 Target Tracking으로 거는 모양이다.

resource "aws_appautoscaling_target" "ecs" {
  service_namespace  = "ecs"
  resource_id        = "service/${aws_ecs_cluster.main.name}/${aws_ecs_service.orders.name}"
  scalable_dimension = "ecs:service:DesiredCount"
  min_capacity       = 2
  max_capacity       = 10
}

resource "aws_appautoscaling_policy" "ecs_cpu" {
  name               = "cpu-target-50"
  service_namespace  = "ecs"
  resource_id        = aws_appautoscaling_target.ecs.resource_id
  scalable_dimension = aws_appautoscaling_target.ecs.scalable_dimension
  policy_type        = "TargetTrackingScaling"

  target_tracking_scaling_policy_configuration {
    target_value = 50.0

    predefined_metric_specification {
      predefined_metric_type = "ECSServiceAverageCPUUtilization"
    }
  }
}

이걸 띄우면

“CPU 평균 50% 부근을 유지해라”

라는 규칙이 적용된다.


10. 이렇게 쓰면 망한다 — 안티패턴

안티패턴 1. 최소를 1로 둔다

Min 1

한 대가 죽는 순간 서비스가 0대가 된다.
운영 서비스는 최소 2대로 시작한다.

안티패턴 2. 최대를 너무 크게 둔다

Max 100

비용 사고가 난다.
악성 트래픽 한 번에 수십 ~ 수백 인스턴스가 떠서 청구서가 폭발한다.

Max는 “정상 트래픽 + 여유분” 정도로 제한한다
그 위로는 사람이 의식적으로 늘려야 한다

안티패턴 3. 헬스 체크 실패를 무시한 채 스케일링한다

ASG가 자꾸 인스턴스를 새로 띄우는데도
헬스 체크가 계속 실패하면 새 인스턴스도 계속 죽는다.

“왜 ASG가 끝없이 인스턴스를 만들고 죽이나” 면
스케일링 문제가 아니라 헬스 체크 문제다

안티패턴 4. Sticky Session을 켜고 자동 스케일링도 켠다

신규 인스턴스가 들어와도 기존 사용자는 계속 옛 인스턴스로 간다.
새 인스턴스는 한가하고 옛 인스턴스만 죽도록 바쁘다.

자동 스케일링과 sticky는 본질적으로 안 어울린다
한쪽을 선택하면 다른 쪽을 양보한다


11. 한 줄로 정리

Auto Scaling은 트래픽에 맞춰 서버 수를 자동으로 조정하면서
죽은 인스턴스까지 자동 교체하는 자가 치유 메커니즘이다


12. 이 장의 핵심 정리

  1. ASG는 Min · Desired · Max 세 숫자로 인스턴스 수를 관리한다.
  2. Target Tracking이 가장 단순하고 권장되는 정책이다.
  3. ALB 헬스 체크와 ASG는 함께 동작해 자가 치유를 이룬다.
  4. ECS에서는 Service Auto Scaling이 비슷한 역할을 한다.
  5. Fargate에서는 클러스터 ASG 자체가 사라지고 태스크 수만 조정한다.
  6. Max는 비용 사고를 막기 위해 의식적으로 제한한다.